//虚继承
#include <iostream>
using namespace std;

class A
{
public:
    A(int a=0){cout<<"a:"<<a<<endl;}
};

class B : virtual public A
{
public:
    B(int b=0):A(b){cout<<"b:"<<b<<endl;}
};

class C : public B
{
public:
    C(int c=0):B(c),A(88){cout<<"c:"<<c<<endl;}
};

class D : public C
{
public:
    D(int d=0):C(d){cout<<"d:"<<d<<endl;}
};

int main(int argc, char const *argv[])
{
    D d(2);

    C c;
    return 0;
}
